使用 Git 來做版本控制幾乎已經是業界的標準,大部分的使用者不是直接用 Command Line 介面,要不然就使用專門的 Git 圖形介面軟體,很少直接在編輯器裡使用整合的指令,Emacs 在這一點可能會讓人改觀
Emacs 有一個直接跟 Git 整合的套件:Magit,它的特點是
先看一下它的介面,等一下再做詳細介紹,可以看見它把大部分的指令都包在介面裡,看起來很複雜,其實使用上很簡單,下面會介紹
安裝 Magit 的方式相當簡單,就是單純設定一個熱鍵 Ctrl-x g
來啟動 magit-status
(use-package magit
:ensure t
:bind (("\C-x g" . magit-status))
)
Meta-x magit-clone
clone repository
的 URI 例如 https://github.com/jerryhsieh/Emacs-config.git
Clone to
的目錄Git 的資源庫是以目錄為單位
Ctrl-x g
create repository in xxx? (y or n)
就會初始一個新的 repository
Magit
的緩衝區,可以下指令,剛開始不熟,可以使用 ? 來叫出指令緩衝區
Git 最基本的流程如圖 (從 https://git-scm.com/about/staging-area 擷取)
有些檔案我們要排除他們在資源庫裡,例如一些 tag 檔,一些外來的函式庫 (node_modules)等等
.gitignore
檔案,並且將相關檔案從 untracked files 移掉
當修改了 staged 的檔案時,這時按 g refresh (重新顯示) magit 緩衝區,會出現 Unstaged changes 也就是 modifed 檔案
這時如果增加新的檔案,就會同時有 Untracked files 跟 Unstaged changes
如果專案到了一定階段,可以做 Commit,可以連續按兩次 c,剛開始不熟,先按一次 c,會出來
就像在 command line 下 git commit
一樣,可以加一些參數,例如 -a
是 stage all modified and deleted files,我們用 Ctrl-c Ctrl-c
可以保留為預設,Action 是指下一個指令,再按一次 c
出現兩個視窗,上面 magit-diff 顯示這次 commit 的不同的地方,下方可以打入 commit message,太長的話會出現警告顏色
輸入完畢,按 Ctrl-c Ctrl-c
儲存,儲存完畢 magit緩衝區會出現 Head
要看 commit 的歷史 (log),可以按兩次 l,
Stash 是一個特殊的狀態,通常使用在有些改變我們先不確定要做 commit,或許想先看看哪一種改變比較好,或許不確定改變是否可行,這時候可以先放在 stash 裡,到時在決定要不要用,或者哪一個 stash 比較好
在 Magit 裡,使用 z 來做 stashing,按兩次 z 就可以輸入一個簡單的訊息方便以後來看
當有多個stash 時,移動游標,按 space 或 enter 可以看改變的狀況
你如果決定要使用這個 stash,移到那一個 stash,按 z 跟 p (pop)
如果確定不要了,可以按 z 跟 k (drop) 掉